package com.ruitu.health_2.dao.http;

import com.ruitu.arad.api.BaseResult;
import com.ruitu.router_module.bean.BaseResult2;
import com.ruitu.router_module.bean.PageModel2;
import com.ruitu.router_module.bean.article.Article;
import com.ruitu.router_module.bean.extras.RongToken;
import com.ruitu.router_module.bean.extras.RongUser;
import com.ruitu.router_module.bean.home.AdvertContent;
import com.ruitu.router_module.bean.home.HomeData;
import com.ruitu.router_module.bean.home.MallHomeData;
import com.ruitu.router_module.bean.home.ModelData;
import com.ruitu.router_module.bean.home.ReadPartie;
import com.ruitu.router_module.bean.home.SearchData;
import com.ruitu.router_module.bean.order.ConfirmOrder;
import com.ruitu.router_module.bean.product.Activity;
import com.ruitu.router_module.bean.product.ArtMan;
import com.ruitu.router_module.bean.product.ArtManDetail;
import com.ruitu.router_module.bean.product.ArtiVideo;
import com.ruitu.router_module.bean.product.Book;
import com.ruitu.router_module.bean.product.Coupon;
import com.ruitu.router_module.bean.product.ProDetail;
import com.ruitu.router_module.bean.product.ProHome;
import com.ruitu.router_module.bean.product.ReadPartyDetail;
import com.ruitu.router_module.bean.product.Sku;
import com.ruitu.router_module.bean.product.Video;
import com.ruitu.router_module.bean.product.VideoDetial;
import com.ruitu.router_module.bean.system.Common;

import java.util.List;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.Streaming;
import retrofit2.http.Url;

public interface ApiService {
    //融云获取token接口
    @FormUrlEncoded
    @POST("getToken.json")
    Observable<RongToken> reqRongToken(
            @Header("App-Key") String appKey,
            @Header("Nonce") String Nonce,
            @Header("Timestamp") String Timestamp,
            @Header("Signature") String Signature,
            @Field("userId") String userId,
            @Field("name") String name,
            @Field("portraitUri") String portraitUri);

    // chat/getUserInfo 获取用户信息
    @GET("chat/getUserInfo")
    Observable<BaseResult<RongUser>> reqUserInfo(@Query("accountId") String accountId);

    @Streaming
    @GET
    Observable<ResponseBody> downloadApk(@Url String url);

    // retrofit
    @Streaming
    @GET
    Call<ResponseBody> download(@Url String url);

    @POST("/member/app/getCodeApp")
    Observable<BaseResult2> doyzm(@Body RequestBody body);

//    rsaKey/api/checkRsa  测试post加密接口
//    rsaKey/api/testEncrypt 测试get加密接口

    // 测试get请求加密接口
    @GET("rsaKey/testEncrypt")
    Observable<BaseResult2> testGet(@Query("id") String id);

    // 测试post
    @POST("rsaKey/api/checkRsa")
    Observable<BaseResult2> testPost(@Body RequestBody body);

    // home/app/appIndex 首页数据接口
    @GET("home/app/appIndex")
    Observable<BaseResult2<HomeData>> reqHomeData();

    // home/app/appTab 首页根据tab获取商品 tabId不同 返回的数据不一样 此为商品
    @GET("home/app/appTab")
    Observable<BaseResult2<PageModel2<ProHome>>> reqHomeTab1(@Query("tabId") String tabId
            , @Query("pageSize") int size, @Query("pageNum") int num);

    // home/app/appTab 首页根据tab获取商品 tabId不同 返回的数据不一样 此为读书会
    @GET("home/app/appTab")
    Observable<BaseResult2<PageModel2<ReadPartie>>> reqHomeTab2(@Query("tabId") String tabId
            , @Query("pageSize") int size, @Query("pageNum") int num);

    // home/app/appTab 首页根据tab获取商品 tabId不同 返回的数据不一样 此为文章视频混排
    @GET("home/app/appTab")
    Observable<BaseResult2<PageModel2<ArtiVideo>>> reqHomeTab3(@Query("tabId") String tabId
            , @Query("pageSize") int size, @Query("pageNum") int num);

    // home/app/indexByModelId 模块首页的接口
    @GET("home/app/indexByModelId")
    Observable<BaseResult2<ModelData>> reqModelData(@Query("modelId") String modelId);

    // video/api/getVideoList 获取视频列表
    @GET("video/api/getVideoListPage")
    Observable<BaseResult2<PageModel2<Video>>> reqVideoList(@Query("pageSize") int size, @Query("pageNum") int num);

    // video/app/getVideoListPageByTitle 根据名称和分页获取视频列表
    @GET("video/app/getVideoListPageByTitle")
    Observable<BaseResult2<PageModel2<Video>>> reqVideoListByTitle(
            @Query("pageSize") int size, @Query("pageNum") int num, @Query("title") String title);

    // video/api/videoInfo 获取视频列详情
    @GET("video/api/videoInfo")
    Observable<BaseResult2<VideoDetial>> reqVideoDetail(@Query("id") String id, @Query("memberId") String memberId);

    // artMan/app/getArtManListPageByName 获取分页艺人列表
    @GET("artMan/app/getArtManListPageByName")
    Observable<BaseResult2<PageModel2<ArtMan>>> reqArtManListByName(
            @Query("pageSize") int size, @Query("pageNum") int num, @Query("name") String name);

    // artMan/app/getDetailIndex 获取艺人详情
    @GET("artMan/app/getDetailIndex")
    Observable<BaseResult2<ArtManDetail>> reqArtManDetail(@Query("artId") String artId);

    // article/app/getArticleListPageByTitle 获取分页文章列表
    @GET("article/app/getArticleListPageByTitle")
    Observable<BaseResult2<PageModel2<Article>>> reqArticleListByTitle(
            @Query("pageSize") int size, @Query("pageNum") int num, @Query("title") String title);

    // product/app/listByName 根据名称分页获取商品列表
    @GET("product/app/listByName")
    Observable<BaseResult2<PageModel2<ProHome>>> reqProListByName(
            @Query("pageSize") int size, @Query("pageNum") int num, @Query("name") String name);

    // product/api/getOne 获取商品详情
    @GET("product/api/getOne")
    Observable<BaseResult2<ProDetail>> reqProDetail(@Query("id") String id);

    // sku/app/getSkuList 获取商品的sku信息
    @GET("sku/app/getSkuList")
    Observable<BaseResult2<List<Sku>>> reqSkuList(@Query("pid") String pid);

    // cart/api/add 添加商品到购物车
    @POST("cart/api/add")
    Observable<BaseResult2<String>> reqAddToCart(@Body RequestBody body);

    // home/app/getBigSearch 全站搜索  SearchData
    @GET("home/app/getBigSearch")
    Observable<BaseResult2<SearchData>> reqSearch(@Query("name") String name);

    // coupon/api/list 获取优惠券列表
    @GET("coupon/api/list")
    Observable<BaseResult2<PageModel2<Coupon>>> reqCouponList(@Query("pageSize") int size, @Query("pageNum") int num);

    // couponHistory/api/create 领取优惠券
    @POST("couponHistory/api/create")
    Observable<BaseResult2<String>> reqGetCoupon(@Body RequestBody body);

    // order/app/buyNow 立即购买  type 0-普通商品，1-视频，2-健康订单
    @GET("order/app/buyNow")
    Observable<BaseResult2<ConfirmOrder>> reqBuyNow(@Query("userId") String uId, @Query("productId") String pId
            , @Query("type") String type, @Query("skuId") String skuId, @Query("buyNum") String buyNum);

    // market/app/marketIndex 商城模块首页
    @GET("market/app/marketIndex")
    Observable<BaseResult2<MallHomeData>> reqMallHomeData();

    // column/app/getColumnGoodsList 查询商城栏目的商品
    @GET("column/app/getColumnGoodsList")
    Observable<BaseResult2<PageModel2<ProHome>>> reqProListByColumn(@Query("pageSize") int size
            , @Query("pageNum") int num, @Query("columnId") String columnId);

    // market/app/marketByPosId 根据tab中的posId获取分页商品列表
    @GET("market/app/marketByPosId")
    Observable<BaseResult2<PageModel2<AdvertContent<ProHome>>>> reqMallProListByTab(@Query("posId") String posId
            , @Query("pageSize") int size, @Query("pageNum") int num);

    // market/app/marketByPosId 根据tab中的posId获取分页读书会列表
    @GET("market/app/marketByPosId")
    Observable<BaseResult2<PageModel2<AdvertContent<ReadPartie>>>> reqReadListByTab(@Query("posId") String posId
            , @Query("pageSize") int size, @Query("pageNum") int num);

    // market/app/marketByPosId 根据tab中的posId获取分页书籍列表
    @GET("market/app/marketByPosId")
    Observable<BaseResult2<PageModel2<AdvertContent<Book>>>> reqBookListByTab(@Query("posId") String posId
            , @Query("pageSize") int size, @Query("pageNum") int num);

    // market/app/marketByPosId 根据tab中的posId获取分页文章列表
    @GET("market/app/marketByPosId")
    Observable<BaseResult2<PageModel2<AdvertContent<Article>>>> reqArticleListByTab(@Query("posId") String posId
            , @Query("pageSize") int size, @Query("pageNum") int num);

    // market/app/marketByPosId 根据tab中的posId获取分页视频列表
    @GET("market/app/marketByPosId")
    Observable<BaseResult2<PageModel2<AdvertContent<Video>>>> reqVideoListByTab(@Query("posId") String posId
            , @Query("pageSize") int size, @Query("pageNum") int num);

    // market/app/marketByPosId 根据tab中的posId获取分页视频列表
    @GET("market/app/marketByPosId")
    Observable<BaseResult2<PageModel2<AdvertContent<Activity>>>> reqActivityListByTab(@Query("posId") String posId
            , @Query("pageSize") int size, @Query("pageNum") int num);

    // readParty/app/readPartyIndex 读书会模块首页
    @GET("readParty/app/readPartyIndex")
    Observable<BaseResult2<MallHomeData>> reqReadPartieHomeData();

    // readParty/app/getReadParty 分页读书会列表
    @GET("readParty/app/getReadParty")
    Observable<BaseResult2<PageModel2<ReadPartie>>> reqReadPartieList(@Query("pageSize") int size, @Query("pageNum") int num);

    // 分页书籍列表
    @GET("/readParty/app/getBookByReadId")
    Observable<BaseResult2<PageModel2<Book>>> reqBookList(@Query("pageSize") int size, @Query("pageNum") int num);

    // readParty/app/selectArtManByExample 查询所有读书会的艺人
    @GET("readParty/app/selectArtManByExample")
    Observable<BaseResult2<PageModel2<ArtMan>>> reqArtManListByRead(
            @Query("pageSize") int size, @Query("pageNum") int num, @Query("name") String name);

    // readParty/app/getReadPartyIndexOne 读书会详情
    @GET("readParty/app/getReadPartyIndexOne")
    Observable<BaseResult2<ReadPartyDetail>> reqReadPartieDetail(@Query("readPartyId") String id);

    // readParty/app/getReadPartyBookListByType 读书会在读/已读/未读 1 已读 2 在读 3 将读
    @GET("readParty/app/getReadPartyBookListByType")
    Observable<BaseResult2<List<Book>>> reqReadPartyBookStateList(
            @Query("readPartyId") String id, @Query("type") String type);

    // healthy/app/healthyIndex 健康管理模块首页
    @GET("healthy/app/healthyIndex")
    Observable<BaseResult2<MallHomeData>> reqHealthManageHomeData();

    // culture/app/cultureIndex 中华文化模块首页
    @GET("culture/app/cultureIndex")
    Observable<BaseResult2<MallHomeData>> reqChinaCultureHomeData();

    // life/app/lifeIndex 品味生活模块首页
    @GET("life/app/lifeIndex")
    Observable<BaseResult2<MallHomeData>> reqLifeColorHomeData();

    // travel/app/travelIndex  文化旅行模块首页
    @GET("travel/app/travelIndex")
    Observable<BaseResult2<MallHomeData>> reqCultureTravelHomeData();

    // edution/app/edutionIndex 教育文化模块首页
    @GET("edution/app/edutionIndex")
    Observable<BaseResult2<MallHomeData>> reqEduCultureHomeData();

    // collect/app/create 添加收藏
    @POST("collect/app/create")
    Observable<BaseResult2<Common>> reqAddCollect(@Body RequestBody body);

    // collect/app/delete 删除收藏
    @POST("collect/app/delete")
    Observable<BaseResult2<String>> reqDelCollect(@Body RequestBody body);
}